# 设置 CMake 的最低版本要求为 3.5，如果低于此版本则报致命错误
cmake_minimum_required ( VERSION 3.15 FATAL_ERROR )

# 定义项目名称和使用的语言（本例中使用 C++）
project ( recipe-08 LANGUAGES CXX )

# 打印当前 C++ 编译器的默认编译标志
message ( "C++ compiler flags: ${CMAKE_CXX_FLAGS}" )

# 创建一个列表，用于存储编译选项
list ( APPEND flags "-fPIC" "-Wall" ) # 添加 -fPIC（生成位置无关代码）和 -Wall（启用常用警告）

# 如果不是 Windows 系统，则添加额外的警告标志
if ( NOT WIN32 )
  list ( APPEND flags "-Wextra" "-Wpedantic" ) # -Wextra 提供更多警告，-Wpedantic 强制遵循标准
endif ()

# 创建一个静态库目标 "geometry"
add_library ( geometry
  STATIC # 指定库类型为静态库
    geometry_circle.cpp # 包含圆相关的实现文件
    geometry_circle.hpp # 包含圆相关的头文件
    geometry_polygon.cpp # 包含多边形相关的实现文件
    geometry_polygon.hpp # 包含多边形相关的头文件
    geometry_rhombus.cpp # 包含菱形相关的实现文件
    geometry_rhombus.hpp # 包含菱形相关的头文件
    geometry_square.cpp # 包含正方形相关的实现文件
    geometry_square.hpp # 包含正方形相关的头文件
)

# 为目标 "geometry" 设置编译选项
target_compile_options ( geometry
  PRIVATE # 编译选项仅应用于该目标，不会传递给其他相关目标
    ${flags} # 使用前面定义的编译选项列表
)

# 创建一个可执行文件目标 "compute-areas"
add_executable ( compute-areas compute-areas.cpp ) # 指定主程序入口文件

# 为目标 "compute-areas" 设置编译选项
target_compile_options ( compute-areas
  PRIVATE # 编译选项仅应用于该目标
    "-fPIC" # 启用位置无关代码（适用于共享库和静态库）
)

# 将可执行文件 "compute-areas" 链接到静态库 "geometry"
target_link_libraries ( compute-areas geometry )